package br.com.velp.sudecap.daoimpl;

import br.com.velp.sudecap.comum.SpringConstants;
import br.com.velp.sudecap.dao.LogEventoDAO;
import br.com.velp.sudecap.entidade.LogEvento;
import br.com.velp.sudecap.entidade.Usuario;
import br.com.velp.sudecap.enumerator.TipoEventoEnum;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Repository;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.07.2013 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisitos_afetados> N/A </requisitos_afetados>
 * <descricao> Implementação da Interface Responsável Pela Manipulação
 *             dos Registros de Logs de Eventos do Sistema
 * </descricao>
 * </sumario>
 */
@Repository("logEventoDAO")
@Lazy(SpringConstants.LAZY_BEANS)
public class LogEventoDAOImpl implements LogEventoDAO {
    
    public static final Long serialVersionUID = 1l;
    
    @Autowired
    private SessionFactory sessionFactory;
    
    @Override
    public void registrarLogEvento(TipoEventoEnum tipoEvento, Usuario usuario, 
    String descricao, Long idRegistro, String controlador, String registroXml) {
        
        LogEvento logEvento = new LogEvento();
        
        logEvento.setDataHora(new Date());
        logEvento.setDescricao(descricao);
        logEvento.setTipoEvento(tipoEvento.getValue());
        logEvento.setIdUsuario(usuario.getId());
        logEvento.setIdRegistro(idRegistro);
        logEvento.setControlador(controlador);
        logEvento.setUsuario(usuario.getLogin());
        
        getSession().save(logEvento);
        getSession().flush();
        
    }
    
    @Override
    public Session getSession() {
        return this.sessionFactory.getCurrentSession();
    }
    
}
